package com.qd.common.panda.domain.entity.carpark;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.JsonNode;
import lombok.Data;
import lombok.ToString;
import lombok.experimental.Accessors;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
import java.util.Optional;

/**
 * 存储在redis中的停车场数据，方便搜索
 * @author sjk
 */
@Data
@Accessors(chain = true)
@ToString
public class CarParkInfoDTO {

    /**
     * 主键
     */
    @JsonProperty("pId")
    private String pId;
    /**
     * 停车场编码:自动生成，用于葵花码中的参数
     */
    private String code;
    /**
     * 名称
     */
    private String name;
    /**
     * 停车开始时间
     */
    private String startTime;
    /**
     * 停车结束时间
     */
    private String endTime;
    /**
     * 总泊位
     */
    private Integer parkNum;
    /**
     * 空闲泊位
     */
    private Integer freeParkNum;
    /**
     * 日租可租赁车位数量(之前没有该字段，因为新增短租业务后增加)
     */
    private Long rentableDayParkSpacesNum;
    /**
     * 时租可租赁车位数量(之前没有该字段，因为新增短租业务后增加)
     */
    private Long rentableHourParkSpacesNum;
    /**
     * 空闲状态
     */
    private Integer freeStatus;
    /**
     * 停车场类型
     */
    private String carParkType;
    /**
     * 车位类型(之前没有该字段，因为新增短租业务后增加)，PARK_SPACE_TYPE：商用，住宅，短租车位（因为短期租赁增加）
     */
    private String parkSpaceType;
    /**
     * 停车场资费说明
     */
    private String feeNote;
    /**
     * 类型,充电站、停车场、加油站
     */
    private String parkType;
    /**
     * 是否启用
     */
    private String enable;
    /**
     * 距离
     */
    private Long distance;
    /**
     * 纬度
     */
    private BigDecimal lat;
    /**
     * 经度
     */
    private BigDecimal lng;
    /**
     * 地址
     */
    private String address;
    /**
     * 所在地区名称
     */
    private String regionName;
    /**
     * 是否有预约信息
     * sf0 否 sf1 是
     */
    private String isAppointmentSet;
    /**
     * 是否占道停车
     * sf0 否 sf1 是
     */
    private String onStreet;
    /**
     * 前往停车场的车辆数
     */
    private Integer goToParkNum;
    /**
     * 泊位状态
     */
    private String berthStatus;
    /**
     * 人工确认入场
     */
    private String confirmIn;
    /**
     * 人工确认出场
     */
    private String confirmOut;
    /**
     * ETC支付
     */
    private String etcPay;
    /**
     * 联系电话
     */
    private String contactNumber;
    /**
     * 充电信息
     */
    private Map<String, Object> charge;
    /**
     * 停车场图片介绍
     */
    private List<String> imgList;
    /**
     * 加油站信息
     */
    private JsonNode gasStation;

    public void freeData() {
        this.pId = null;
        this.code = null;
        this.name = null;
        this.startTime = null;
        this.endTime = null;
        this.parkNum = null;
        this.freeParkNum = null;
        this.feeNote = null;
        this.carParkType = null;
        this.parkSpaceType = null;
        this.enable = null;
        this.distance = null;
        this.lat = null;
        this.lng = null;
        this.address = null;
        this.regionName = null;
        this.isAppointmentSet = null;
        this.onStreet = null;
        this.goToParkNum = null;
        this.berthStatus = null;
        this.confirmIn = null;
        this.confirmOut = null;
        this.etcPay = null;
        this.contactNumber = null;
        Optional.ofNullable(charge).ifPresent(Map::clear);
        Optional.ofNullable(imgList).ifPresent(List::clear);
        this.gasStation = null;
    }
}
